const thex = (()=>{
    // ================================================================
    // Const: Registers ID
    // ================================================================
    const REG = (()=>{
        let ID_BEGIN = 0
        const ID_Make = ()=>{return ID_BEGIN++}
        return {
            IP:ID_Make(),
            SP:ID_Make(),
            // Source/Dest
            SI:ID_Make(),
            SN:ID_Make(),
            DI:ID_Make(),
            DN:ID_Make(),
            // Function result value
            R:ID_Make(),
            // Loop times
            N:ID_Make(),
            // Universalys
            A:ID_Make(),
            B:ID_Make(),
            C:ID_Make(),
            D:ID_Make(),
            E:ID_Make(),
            F:ID_Make(),
            G:ID_Make(),
            H:ID_Make(),
            I:ID_Make(),
            J:ID_Make(),
            // Float
            F1:ID_Make(),
            F2:ID_Make(),
            F3:ID_Make(),
            F4:ID_Make(),
            F5:ID_Make(),
            F6:ID_Make(),
            F7:ID_Make(),
            F8:ID_Make(),
        }
    })()
    
    // ================================================================
    // Struct: Machine-Code
    // All Code to Fixed 64Bit Used
    // ================================================================
    const MCODE = {
        SET_R_R:[0x11, 2, 6, 6],
    }
    const MCODE_Make = (i, a=null, b=null, c=null)=>{
        let mc = i[0].toString(2)
        function Gen(u, ulen){
            mc += u.toString(2).padStart(ulen, '0')
            return Gen
        }
        if (3 == i.length){
            gen(a, i[1])(b, i[2])
        } else if (4 == i.length){
            gen(a, i[1])(b, i[2])(c, i[3])
        } else {
            throw `In MCODE_Make: Input ${i} Incorrect`
        }
        return mc
    }
    const MCODE_Parse = (bin)=>{
    }

    return {
        REG,
        MCODE, MCODE_Make, MCODE_Parse,
    }
})();

